R script for clusters and Trees

General Data and package loading

############ Packeges ############
rm(list=ls()) #clear whole work space
set.seed(1234)
library(tidyr)
library(ggplot2)
library(dplyr)
library(ggtree)
library(readxl)
library(reshape2)
library(phytools)
library(ggpubr)
library(FSA)
library(RColorBrewer)
library(forcats)
############ Packeges ############
my_col2 <- brewer.pal(6,"Dark2")
my_col3 <- c(my_col2[2],
             my_col2[1],
             my_col2[3],
             my_col2[5],
             my_col2[4],
             my_col2[6])

MIC50 data loading

# MIC50 values from clinical isolates
MIC50.clin <- read_xlsx("../data/MIC50_clean.xlsx")

# MIC50 values from agricultural isolates
MIC50.agr <- read.csv("../data//MIC50_agr.csv", sep=";")

# Metadata for clinical isolates
isolate_info_clin <- read_excel("../data/Isolate_info_clin.xlsx")

# Metadata for agricultural isolates
isolate_info <- read.csv("../data/Isolate_info.csv", sep=";")
isolate_info$Isolate_ID[which(isolate_info$Isolate_ID == "214")] <- 241 #correcting Spelling mistake

# merging the two MIC50 values
MIC50.agr <- merge(isolate_info[,c("Isolate_ID","Isolate_name")] ,MIC50.agr, by.x = "Isolate_name", by.y = "Isolate_name", all.x = TRUE)
colnames(MIC50.clin)[c(1,2)] <- c("Isolate_ID", "Isolate_name")
MIC50.agr <- MIC50.agr[,colnames(MIC50.agr)[c(2,1,3:5)]]
colnames(MIC50.agr) <- colnames(MIC50.clin)
All_MIC50_wide <- rbind(MIC50.agr, MIC50.clin)


All_MIC50 <- melt(All_MIC50_wide, id.vars = colnames(All_MIC50_wide)[c(1,2)], variable.name = "Fungicide", value.name = "MIC50")

#### remove outlier #####
# All_MIC50 <- All_MIC50[-which(All_MIC50$Isolate_name %in% c("AL4e","LC5.2") & All_MIC50$Fungicide == "MIC50.CYP") ,]

### Adjusting outlier to max value tested ###
All_MIC50[which(All_MIC50$Isolate_name %in% c("AL4e", "LC5.2") & All_MIC50$Fungicide == "Cyprodinil"),"MIC50"] <- 128

Isolate metadata loading

### adding metadata ###
isolate_info_clin$season <- "unknown"
isolate_info_clin$isolation_fungicide <- "None"
isolate_info_clin$group <- "clinical"

isolate_info$group <- "agricultural"
isolate_info$source <- "waedenswil"

# merging metadata
isolate_info_clin <- isolate_info_clin[,colnames(isolate_info)]

All_isolate_info <- rbind(isolate_info_clin,isolate_info)


# Adding other Aureobasidium (references) Metadata
# (check for file names if it throws an error down the line)
Other_variants <- c("Aureobasidium_pullulans_var_namibiae_masked_contig" ,
                    "Aureobasidium_pullulans_var_melanogenum_masked_contig",
                    "Aurpu_var_sub1_masked_contig",
                    "Aureobasidium_pullulans_var_pullulans_masked_contig")


Other_var_names <- c("A. namibiae", "A. melanogenum","A. subglaciale","EXF-150")

Other_var_df <- data.frame(A=Other_variants,B=NA,C=NA,D=NA,E=Other_var_names, G ="reference", H = "JGI")
colnames(Other_var_df) <- colnames(All_isolate_info)

Tree clinical vs agricultural isolates

# Loading the tree
tree <- read.tree("../data/221111_phame_all_final_RaxML/results/trees/RAxML_bipartitions.221111_Apul_final_RaxML_all_best")

### Tip label correction
tip_lab <- tree$tip.label
tree_isolate_info <- All_isolate_info[,c("Isolate_ID","Isolate_name")]
tree_isolate_info$Isolate_ID <- paste(tree_isolate_info$Isolate_ID,
                                      "_contigs_contig", 
                                      sep = "")
tree_isolate_info  <- rbind(tree_isolate_info , Other_var_df[,c(1,5)])
tree_isolate_info  <- rbind(tree_isolate_info , c("AurpulNBB1_AssemblyScaffolds_Repeatmasked","NBB_7.2.1"))
tip_lab  <- merge(as.data.frame(tip_lab),tree_isolate_info ,by.x = "tip_lab",by.y = "Isolate_ID", all.x = TRUE)
tree$tip.label <- tip_lab[[2]][match(tree$tip.label, tip_lab[[1]])]

# Reference added to meta data
All_isolate_info <- rbind(All_isolate_info,c("AurpulNBB1_AssemblyScaffolds_Repeatmasked",NA,NA,NA,"NBB_7.2.1", "reference", "JGI"))
All_isolate_info <- rbind(All_isolate_info,Other_var_df)


# clinical vs agricultural in group info
group_info <- split(All_isolate_info$Isolate_name, All_isolate_info$group)
tree <- groupOTU(tree,group_info)

# extracting bootstrap values for labeling
bootstrap <- as.numeric(tree$node.label)
bootstrap[which(bootstrap < 90)] <- NA #removing bootstrap below 90%
bootstrap <- c(rep(NA, times = 51),bootstrap)


# plotting the tree
p <- ggtree(tree, aes(color = group)) + 
      theme_tree2() + 
      geom_nodelab(aes(label = bootstrap), hjust =1.3, vjust = -0.3, size = 2.5) +
      geom_tiplab(hjust = 0, size = 3, vjust = 0.5) +
      labs(title = "Phylogenetic Tree with all SNP's and all isolates") +
      xlim(0,1.1)
p

# collaping other variant clade 
cp <- collapse(p + xlim(0,0.11) + labs(title = "Phylogenetic Tree with all SNP's and all isolates with collapsed node"), node=85)
## Scale for 'x' is already present. Adding another scale for 'x', which will
## replace the existing scale.
cp

# viewClade(p + labs(title = "Phylogenetic Tree with all SNP's and all isolates the collapsed node"), node = 72)

Clustering

# extracting phylogenetic distance form the tree
phylo.dist <- cophenetic.phylo(tree)
dist2 <- as.matrix(dist(phylo.dist, method = "euclidean"))

# hierarchical clustering with generating two clusters (a. pullulans vs non A. pullulans)
hc <- hclust(dist(phylo.dist, method = "euclidean"), method = "complete")
hccut <- as.data.frame(cutree(hc, k = 2))
All_isolate_info$cluster <- as.factor(hccut[,1][match(All_isolate_info$Isolate_name, 
                                                      rownames(hccut))])

# removing non A. pullulans form distance matrix
phylo.dist.pul <- phylo.dist[-which(rownames(phylo.dist) %in% 
                                      All_isolate_info$Isolate_name[which(All_isolate_info$cluster == 2)]),
                             -which(colnames(phylo.dist) %in% 
                                      All_isolate_info$Isolate_name[which(All_isolate_info$cluster == 2)])]

# hierarchical clustering only with A. pullulans
k <- 5 # number of meaningfull clusters

hc <- hclust(dist(phylo.dist.pul, method = "euclidean"), method = "complete")
hccut <- as.data.frame(cutree(hc, k = k))
All_isolate_info$cluster2 <- as.character(hccut[,1][match(All_isolate_info$Isolate_name, rownames(hccut))])
All_isolate_info$cluster2[which(is.na(All_isolate_info$cluster2))] <- k+1

# naming the clusters
c_nam <- data.frame(cluster2 = c(1:(k+1)),
                    c_names = c("clinical pullulans",
                                "Agricultural A. pullulans (I)", 
                                "Agricultural A. pullulans (T)",
                                "A. pul clin own cluster",
                                "Agricultural A. pullulans (S)", 
                                "clinical non pullulans"))


# Ordering clusters and adding the clusters to the metadata
c_nam <- mutate(c_nam, c_names = fct_relevel(c_names,  
                                             "clinical non pullulans",
                                             "A. pul clin own cluster" ,
                                             "clinical pullulans",
                                             "Agricultural A. pullulans (S)", 
                                             "Agricultural A. pullulans (I)", 
                                             "Agricultural A. pullulans (T)"
                                    ))

names(my_col3) <- c_nam$c_names[order(c_nam$c_names)]
All_isolate_info_c2 <- merge(All_isolate_info, c_nam, by.x = "cluster2", by.y = "cluster2", all.x = T)

Tree rooted with A. subglaciale

# rooting the three with A. subglaciale
tree.rooted <- root(tree, which(tree$tip.label == "A. subglaciale"))

# clusters as group info
group_info <- split(All_isolate_info$Isolate_name, All_isolate_info$cluster)
tree.rooted <- groupOTU(tree.rooted,group_info)

# plotting the tree pullulans vs non pullulans
p <- ggtree(tree.rooted, aes(color = group)
            ) + 
      theme_tree2() +  
      # geom_text(aes(label = node)) +
      # geom_tiplab(hjust = 0, size = 3, vjust = 0.5) +
      labs(title = "Phylogenetic Tree with all SNP's and all isolates") +
      xlim(0,1.1)+
  scale_color_manual(values=c(my_col3)[c(1,2)])
p + 
  geom_cladelabel(node=85, label=expression(italic("A. Pullulans")), 
                  color=c(my_col3)[1], 
                  offset=.075, align=TRUE
                  ) +  
  geom_cladelabel(node=86, label=expression(paste("non ",italic("A. Pullulans"))), 
                  color=c(my_col3)[2], offset=.075, align=TRUE) 
## Warning in is.na(x): is.na() applied to non-(list or vector) of type
## 'expression'

## Warning in is.na(x): is.na() applied to non-(list or vector) of type
## 'expression'

# cluster as group info
group_info <- split(All_isolate_info_c2$Isolate_name, All_isolate_info_c2$c_names)
tree.rooted <- groupOTU(tree.rooted,group_info)


# plotting tree with all clusters
p <- ggtree(tree.rooted, aes(color = group)
            ) + 
      theme_tree2() +  
       # geom_text(aes(label = node)) +
      geom_tiplab(hjust = 0, size = 3, vjust = 0.5) +
  scale_color_manual(values=c(my_col3))

# plotting tree with collapsed non pullulans clade
cp <- collapse(p +
                 geom_nodelab(aes(label = bootstrap), hjust = 1.2, vjust = -0.2, size = 2.5) +
                 xlim(.225,.325) +
                 labs(title = expression(paste("Phylogenetic Tree with ", 
                                               italic("A. Pullulans"), 
                                               " isolates"))), 
               node= 86)
cp  

# plotting tree with collapsed pullulans clade
cp2 <- collapse(p +
                 geom_nodelab(aes(label = bootstrap), hjust = 1.2, vjust = -0.2, size = 2.5) +
                 xlim(0,1) +
                 labs(title = expression(paste("Phylogenetic Tree with non ", 
                                               italic("A. Pullulans"), 
                                               " isolates"))), 
               node= 85)
cp2   

Unrooted Trees

# clusters as group info
group_info <- split(All_isolate_info_c2$Isolate_name, All_isolate_info_c2$c_names)
tree<- groupOTU(tree,group_info)

# plotting tree with all clusters
p <- ggtree(tree, aes(color = group)
            ) + 
      theme_tree2() +  
       # geom_text(aes(label = node)) +
      geom_tiplab(hjust = 0, size = 3, vjust = 0.5) +
  xlim(0,1.1) +
  scale_color_manual(values=c(my_col3))
p

# plotting tree with collapsed non pullulans clade
cp <- collapse(p +
                 # geom_nodelab(aes(label = bootstrap), hjust = 1.6, vjust = -0.2, size = 2.5) +
                 xlim(0,.09) +
                 labs(title = expression(paste("Phylogenetic Tree with ", 
                                               italic("A. Pullulans"), 
                                               " isolates"))), 
               node= 85)
## Scale for 'x' is already present. Adding another scale for 'x', which will
## replace the existing scale.
cp  

cp <- collapse(p +
                 geom_nodelab(aes(label = bootstrap), hjust = 1.6, vjust = -0.2, size = 2.5) +
                 xlim(0,.09) +
                 labs(title = expression(paste("Phylogenetic Tree with ", 
                                               italic("A. Pullulans"), 
                                               " isolates"))), 
               node= 85)
## Scale for 'x' is already present. Adding another scale for 'x', which will
## replace the existing scale.
cp  

# plotting collapsed non pullulans clade
viewClade(p +
            geom_nodelab(aes(label = bootstrap), hjust = 1.2, vjust = -0.2, size = 2.5) +
                 xlim(0,1.1) +
                 labs(title = expression(paste("Phylogenetic Tree with non ", 
                                               italic("A. Pullulans"), 
                                               " isolates"))),
          node= 85)
## Scale for 'x' is already present. Adding another scale for 'x', which will
## replace the existing scale.

MIC50 significance testing

# merging MIC50 values with meta data
All_MIC50_info <- merge(All_MIC50, All_isolate_info_c2[,c(1,2,7,8,9,10)], by.x = "Isolate_ID", by.y = "Isolate_ID", all.x = TRUE)

# log 2 for foldchange in MIC 50 
All_MIC50_info$MIC50 <- log2(All_MIC50_info$MIC50)



dunn.df <- matrix(nrow = 15)

for (i in unique(All_MIC50_info$Fungicide)) {
  dunn.mod <- dunnTest(MIC50 ~ c_names,
                       data=All_MIC50_info[which(All_MIC50_info$Fungicide == i),], 
                       method="bh")
  dunn.df[,1] <- dunn.mod[["res"]][["Comparison"]]
  dunn.inter <- data.frame(dunn.mod[["res"]][["P.adj"]])
  colnames(dunn.inter) <- paste("P.adj_", i)
  dunn.df <- cbind(dunn.df,dunn.inter)
}

MIC50 boxplots

# Boxplot of the MIC50 values agricultural vs clinical
ggplot(data = All_MIC50_info, aes (x = group, y = MIC50, col = group)) +
  geom_boxplot() +
  facet_wrap(~Fungicide, scales = "free") +
  stat_compare_means(method = "wilcox.test", aes(label = ifelse(
    p < 1.e-3,
    sprintf("Wilcox, p = < 0.001"),
    sprintf("Wilcox, p = %5.3f", as.numeric(..p.format..)))))

ggplot(data = All_MIC50_info, aes (x = cluster, y = MIC50, col = cluster)) +
  geom_boxplot() +
  scale_color_discrete(labels = c("pullulans", "non pullulans"))+
  facet_wrap(~Fungicide, scales = "free") +
  stat_compare_means(method = "wilcox.test", aes(label = ifelse(
    p < 1.e-3,
    sprintf("Wilcox, p = < 0.001"),
    sprintf("Wilcox, p = %5.3f", as.numeric(..p.format..)))))

label_dunn <- c("B","B","B","B","A", "A","A",
            "AB","B","B","B","AB", "A",
            "C","ABC", "BC","BC","AB", "A")

label_dunn_df <- data.frame(sig_lab = c("B","B","B","B","A", "A",
                                        "AB","B","B","B","AB", "A",
                                        "C","ABC", "BC","BC","AB", "A"),
                            c_names = rep(c("clinical non pullulans",
                                            "A. pul clin own cluster" ,
                                            "clinical pullulans",
                                            "Agricultural A. pullulans (S)", 
                                            "Agricultural A. pullulans (I)",
                                            "Agricultural A. pullulans (T)"), times= 3),
                            Fungicide = c(rep("Captan", times = 6), 
                                          rep("Cyprodinil", times = 6), 
                                          rep("Difenoconazole", times = 6)),
                            MIC50 = c(rep(7, times = 6), 
                                          rep(7.5, times = 6), 
                                          rep(3.75, times = 6))
                            )

# Boxplot of the MIC50 values phylogenetic clusters
All_MIC50_info%>%
mutate(c_names = fct_relevel(c_names, 
                                             "clinical non pullulans",
                                             "A. pul clin own cluster" ,
                                             "clinical pullulans",
                                             "Agricultural A. pullulans (S)", 
                                             "Agricultural A. pullulans (I)", 
                                             "Agricultural A. pullulans (T)"
                                             )) %>%

  
  ggplot(aes(x = c_names, y = MIC50, colour = c_names)) +
  geom_boxplot() +
  facet_wrap(~Fungicide, scales = "free") +
  theme(legend.position = "none") +
  # stat_compare_means(method = "kruskal.test", hjust = 0.1, aes(label = ifelse(
  #   p < 1.e-3,
  #   sprintf("Kruskal, p = < 0.001"),
  #   sprintf("Kruskal, p = %5.3f", as.numeric(..p.format..))))) +
  theme(axis.text.x = element_text(angle=90, vjust=0.5, hjust = 1, size = 8))+
  xlab(NULL)+
  geom_text(data = label_dunn_df, aes(label = sig_lab, colour = "black"))+
  scale_color_manual(values=c(my_col3))

Session info

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.2.2 Patched (2022-11-10 r83330)
##  os       Ubuntu 20.04.5 LTS
##  system   x86_64, linux-gnu
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Europe/Zurich
##  date     2023-02-06
##  pandoc   2.19.2 @ /usr/lib/rstudio-server/bin/quarto/bin/tools/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package           * version    date (UTC) lib source
##  abind               1.4-5      2016-07-21 [1] RSPM (R 4.2.0)
##  ape               * 5.6-2      2022-03-02 [1] RSPM (R 4.2.0)
##  aplot               0.1.3      2022-04-01 [1] RSPM (R 4.2.0)
##  assertthat          0.2.1      2019-03-21 [2] RSPM (R 4.2.0)
##  backports           1.4.1      2021-12-13 [2] RSPM (R 4.2.0)
##  broom               0.8.0      2022-04-13 [1] RSPM (R 4.2.0)
##  bslib               0.4.2      2022-12-16 [2] RSPM (R 4.2.0)
##  cachem              1.0.6      2021-08-19 [2] RSPM (R 4.2.0)
##  callr               3.7.3      2022-11-02 [2] RSPM (R 4.2.0)
##  car                 3.0-12     2021-11-06 [1] RSPM (R 4.2.0)
##  carData             3.0-5      2022-01-06 [1] RSPM (R 4.2.0)
##  cellranger          1.1.0      2016-07-27 [2] RSPM (R 4.2.0)
##  cli                 3.6.0      2023-01-09 [2] RSPM (R 4.2.0)
##  clusterGeneration   1.3.7      2020-12-15 [1] RSPM (R 4.2.0)
##  coda                0.19-4     2020-09-30 [1] RSPM (R 4.2.0)
##  codetools           0.2-18     2020-11-04 [4] CRAN (R 4.0.3)
##  colorspace          2.0-3      2022-02-21 [1] RSPM (R 4.2.0)
##  combinat            0.0-8      2012-10-29 [1] RSPM (R 4.2.0)
##  crayon              1.5.2      2022-09-29 [2] RSPM (R 4.2.0)
##  DBI                 1.1.3      2022-06-18 [2] RSPM (R 4.2.0)
##  devtools            2.4.5      2022-10-11 [2] RSPM (R 4.2.0)
##  digest              0.6.31     2022-12-11 [2] RSPM (R 4.2.0)
##  dplyr             * 1.0.9      2022-04-28 [1] RSPM (R 4.2.0)
##  dunn.test           1.3.5      2017-10-27 [1] RSPM (R 4.2.0)
##  ellipsis            0.3.2      2021-04-29 [2] RSPM (R 4.2.0)
##  evaluate            0.20       2023-01-17 [2] RSPM (R 4.2.0)
##  expm                0.999-6    2021-01-13 [1] RSPM (R 4.2.0)
##  fansi               1.0.4      2023-01-22 [2] RSPM (R 4.2.0)
##  farver              2.1.0      2021-02-28 [1] RSPM (R 4.2.0)
##  fastmap             1.1.0      2021-01-25 [2] RSPM (R 4.2.0)
##  fastmatch           1.1-3      2021-07-23 [1] RSPM (R 4.2.0)
##  forcats           * 0.5.1      2021-01-27 [1] RSPM (R 4.2.0)
##  fs                  1.6.0      2023-01-23 [2] RSPM (R 4.2.0)
##  FSA               * 0.9.3      2022-02-18 [1] RSPM (R 4.2.0)
##  generics            0.1.2      2022-01-31 [1] RSPM (R 4.2.0)
##  ggfun               0.0.6      2022-04-01 [1] RSPM (R 4.2.0)
##  ggplot2           * 3.3.5      2021-06-25 [1] RSPM (R 4.2.0)
##  ggplotify           0.1.0      2021-09-02 [1] RSPM (R 4.2.0)
##  ggpubr            * 0.4.0      2020-06-27 [1] RSPM (R 4.2.0)
##  ggsignif            0.6.3      2021-09-09 [1] RSPM (R 4.2.0)
##  ggtree            * 3.4.0      2022-04-26 [1] Bioconductor
##  glue                1.6.2      2022-02-24 [2] RSPM (R 4.2.0)
##  gridGraphics        0.5-1      2020-12-13 [1] RSPM (R 4.2.0)
##  gtable              0.3.0      2019-03-25 [1] RSPM (R 4.2.0)
##  highr               0.10       2022-12-22 [2] RSPM (R 4.2.0)
##  htmltools           0.5.4      2022-12-07 [2] RSPM (R 4.2.0)
##  htmlwidgets         1.6.1      2023-01-07 [2] CRAN (R 4.2.2)
##  httpuv              1.6.8      2023-01-12 [2] RSPM (R 4.2.0)
##  igraph              1.3.1      2022-04-20 [1] RSPM (R 4.2.0)
##  jquerylib           0.1.4      2021-04-26 [2] RSPM (R 4.2.0)
##  jsonlite            1.8.4      2022-12-06 [2] RSPM (R 4.2.0)
##  knitr               1.41       2022-11-18 [1] RSPM (R 4.2.0)
##  labeling            0.4.2      2020-10-20 [1] RSPM (R 4.2.0)
##  later               1.3.0      2021-08-18 [2] RSPM (R 4.2.0)
##  lattice             0.20-45    2021-09-22 [4] CRAN (R 4.2.0)
##  lazyeval            0.2.2      2019-03-15 [1] RSPM (R 4.2.0)
##  lifecycle           1.0.3      2022-10-07 [2] CRAN (R 4.2.1)
##  magrittr            2.0.3      2022-03-30 [2] RSPM (R 4.2.0)
##  maps              * 3.4.0      2021-09-25 [1] RSPM (R 4.2.0)
##  MASS                7.3-57     2022-04-22 [1] RSPM (R 4.2.0)
##  Matrix              1.5-1      2022-09-13 [4] CRAN (R 4.2.1)
##  memoise             2.0.1      2021-11-26 [2] RSPM (R 4.2.0)
##  mime                0.12       2021-09-28 [2] RSPM (R 4.2.0)
##  miniUI              0.1.1.1    2018-05-18 [2] RSPM (R 4.2.0)
##  mnormt              2.0.2      2020-09-01 [1] RSPM (R 4.2.0)
##  munsell             0.5.0      2018-06-12 [1] RSPM (R 4.2.0)
##  nlme                3.1-161    2022-12-15 [4] CRAN (R 4.2.2)
##  numDeriv            2016.8-1.1 2019-06-06 [1] RSPM (R 4.2.0)
##  patchwork           1.1.1      2020-12-17 [1] RSPM (R 4.2.0)
##  phangorn            2.8.1      2021-12-15 [1] RSPM (R 4.2.0)
##  phytools          * 1.0-3      2022-04-05 [1] RSPM (R 4.2.0)
##  pillar              1.8.1      2022-08-19 [2] RSPM (R 4.2.0)
##  pkgbuild            1.4.0      2022-11-27 [2] RSPM (R 4.2.0)
##  pkgconfig           2.0.3      2019-09-22 [2] RSPM (R 4.2.0)
##  pkgload             1.3.2      2022-11-16 [2] RSPM (R 4.2.0)
##  plotrix             3.8-2      2021-09-08 [1] RSPM (R 4.2.0)
##  plyr                1.8.7      2022-03-24 [1] RSPM (R 4.2.0)
##  prettyunits         1.1.1      2020-01-24 [2] RSPM (R 4.2.0)
##  processx            3.8.0      2022-10-26 [2] RSPM (R 4.2.0)
##  profvis             0.3.7      2020-11-02 [2] RSPM (R 4.2.0)
##  promises            1.2.0.1    2021-02-11 [2] RSPM (R 4.2.0)
##  ps                  1.7.2      2022-10-26 [2] RSPM (R 4.2.0)
##  purrr               1.0.1      2023-01-10 [2] RSPM (R 4.2.0)
##  quadprog            1.5-8      2019-11-20 [1] RSPM (R 4.2.0)
##  R6                  2.5.1      2021-08-19 [2] RSPM (R 4.2.0)
##  RColorBrewer      * 1.1-3      2022-04-03 [1] RSPM (R 4.2.0)
##  Rcpp                1.0.10     2023-01-22 [2] RSPM (R 4.2.0)
##  readxl            * 1.4.1      2022-08-17 [2] RSPM (R 4.2.0)
##  remotes             2.4.2      2021-11-30 [2] RSPM (R 4.2.0)
##  reshape2          * 1.4.4      2020-04-09 [1] RSPM (R 4.2.0)
##  rlang               1.0.6      2022-09-24 [2] RSPM (R 4.2.0)
##  rmarkdown           2.20       2023-01-19 [2] RSPM (R 4.2.0)
##  rstatix             0.7.0      2021-02-13 [1] RSPM (R 4.2.0)
##  rstudioapi          0.14       2022-08-22 [2] RSPM (R 4.2.0)
##  sass                0.4.5      2023-01-24 [2] RSPM (R 4.2.0)
##  scales              1.2.0      2022-04-13 [1] RSPM (R 4.2.0)
##  scatterplot3d       0.3-41     2018-03-14 [1] RSPM (R 4.2.0)
##  sessioninfo         1.2.2      2021-12-06 [2] RSPM (R 4.2.0)
##  shiny               1.7.4      2022-12-15 [2] RSPM (R 4.2.0)
##  stringi             1.7.12     2023-01-11 [2] RSPM (R 4.2.0)
##  stringr             1.5.0      2022-12-02 [2] RSPM (R 4.2.0)
##  tibble              3.1.8      2022-07-22 [2] RSPM (R 4.2.0)
##  tidyr             * 1.2.0      2022-02-01 [1] RSPM (R 4.2.0)
##  tidyselect          1.2.0      2022-10-10 [2] RSPM (R 4.2.0)
##  tidytree            0.3.9      2022-03-04 [1] RSPM (R 4.2.0)
##  tmvnsim             1.0-2      2016-12-15 [1] RSPM (R 4.2.0)
##  treeio              1.20.0     2022-04-26 [1] Bioconductor
##  urlchecker          1.0.1      2021-11-30 [2] RSPM (R 4.2.0)
##  usethis             2.1.6      2022-05-25 [2] RSPM (R 4.2.0)
##  utf8                1.2.3      2023-01-31 [2] RSPM (R 4.2.0)
##  vctrs               0.5.2      2023-01-23 [2] RSPM (R 4.2.0)
##  withr               2.5.0      2022-03-03 [2] RSPM (R 4.2.0)
##  xfun                0.37       2023-01-31 [2] RSPM (R 4.2.0)
##  xtable              1.8-4      2019-04-21 [2] RSPM (R 4.2.0)
##  yaml                2.3.7      2023-01-23 [2] RSPM (R 4.2.0)
##  yulab.utils         0.0.4      2021-10-09 [1] RSPM (R 4.2.0)
## 
##  [1] /home/agsad.admin.ch/f80854568/R/x86_64-pc-linux-gnu-library/4.2
##  [2] /usr/local/lib/R/site-library
##  [3] /usr/lib/R/site-library
##  [4] /usr/lib/R/library
## 
## ──────────────────────────────────────────────────────────────────────────────